{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\".\\\\diyLogo.png\" alt=\"some_text\">\n",
    "<h1> 第二讲 程序设计基础</h1>\n",
    "<a id=backup></a>\n",
    "<H2>目录</H2>  \n",
    "\n",
    "[2.1 程序执行过程](#Section1)  \n",
    "[2.2 程序实例](#Section2)  \n",
    "[2.3 程序的基本结构](#Section3)     \n",
    "[2.4 顺序结构](#Section4)  \n",
    "[2.5 分支结构](#Section5)  \n",
    "[2.6 循环结构](#Section6) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section1> </a>\n",
    "## 2.1 程序执行过程\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "你的等级是: A\n"
     ]
    }
   ],
   "source": [
    "def determine_grade(score):\n",
    "    if score >= 90:\n",
    "        return 'A'\n",
    "    elif score >= 80:\n",
    "        return 'B'\n",
    "    elif score >= 70:\n",
    "        return 'C'\n",
    "    elif score >= 60:\n",
    "        return 'D'\n",
    "    else:\n",
    "        return 'F'\n",
    "\n",
    "def main():\n",
    "    try:\n",
    "        score = float(input(\"请输入成绩（0-100）: \"))\n",
    "        if not 0 <= score <= 100:\n",
    "            print(\"成绩必须在0到100之间。\")\n",
    "        else:\n",
    "         grade = determine_grade(score)\n",
    "         print(f\"你的等级是: {grade}\")\n",
    "    except ValueError:\n",
    "        print(\"请输入一个有效的数字。\")\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    " main()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "a=!pip list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "numpy                             1.26.4\n",
      "numpydoc                          1.7.0\n",
      "matplotlib                        3.8.4\n",
      "matplotlib-inline                 0.1.6\n"
     ]
    }
   ],
   "source": [
    "for item in a:\n",
    "    if 'numpy' in item:\n",
    "        print(item)\n",
    "for item in a:\n",
    "    if 'matplotlib' in item:\n",
    "        print(item)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x26828c00140>,\n",
       " <matplotlib.lines.Line2D at 0x26828c00170>]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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x8dERkbym9/8hsjISKNNCUjk+9M38r3pH/n+9I98f/pHvj99I+p7E5IiY4lEIpFIJGIjIzgSiUQikUiEQzo4EolEIpFIhEM6OBKJRCKRSIRDOjgSiUQikUiEQzo4PuS5554jLy+PqKgoCgoK+PLLL402KSB48sknmTlzJvHx8aSmpnLjjTdy6NAho80KWJ588klMJhNLly412pSAoby8nG9/+9skJycTExPD1KlT2bFjh9FmBQQOh4Nf/epX5OXlER0dzYgRI3jsscdwuVxGm+Z3NmzYwHXXXUdmZiYmk4l//etfPX6vKAqPPvoomZmZREdHc/HFF7Nv3z5jjDWA/t4fu93OI488wqRJk4iNjSUzM5M777yTiooK4ww+T6SD4yPeeustli5dyi9/+UsKCwtZsGABV111FSUlJUabZjjr16/nhz/8IZs3b2bNmjU4HA4WLVpEa2ur0aYFHNu2beOFF15g8uTJRpsSMDQ0NDB//nzCw8P5+OOP2b9/P3/4wx9ITEw02rSA4KmnnuL555/n2Wef5cCBA/zud7/jf/7nf3jmmWeMNs3vtLa2MmXKFJ599tlef/+73/2Op59+mmeffZZt27aRnp7O5Zdf7plPKDr9vT9tbW3s3LmTX//61+zcuZN33nmHw4cPc/311xtgqY9QJD5h1qxZyv3339/jsXHjxik///nPDbIocKmpqVEAZf369UabElA0Nzcro0ePVtasWaNcdNFFykMPPWS0SQHBI488olxwwQVGmxGwXHPNNcp3v/vdHo/dfPPNyre//W2DLAoMAOXdd9/1/OxyuZT09HTlv//7vz2PdXR0KFarVXn++ecNsNBYTn9/emPr1q0KoBQXF/vHKB8jIzg+oKurix07drBo0aIejy9atIiNGzcaZFXgYrPZAEhKSjLYksDihz/8Iddccw2XXXaZ0aYEFO+//z4zZszg1ltvJTU1lWnTpvGXv/zFaLMChgsuuIDPPvuMw4cPA7Br1y6++uorrr76aoMtCyxOnDhBVVVVj+t0ZGQkF110kbxO94HNZsNkMgVttDQkh236mtraWpxOJ2lpaT0eT0tLo6qqyiCrAhNFUXj44Ye54IILmDhxotHmBAxvvvkmO3fuZNu2bUabEnAcP36cP/3pTzz88MP84he/YOvWrfz4xz8mMjKSO++802jzDOeRRx7BZrMxbtw4LBYLTqeTxx9/nG9+85tGmxZQaNfi3q7TxcXFRpgU0HR0dPDzn/+cO+64IygGcPaGdHB8iMlk6vGzoihnPBbqPPjgg+zevZuvvvrKaFMChtLSUh566CE+/fRToqKijDYn4HC5XMyYMYMnnngCgGnTprFv3z7+9Kc/SQcHVf/32muv8fe//50JEyZQVFTE0qVLyczM5K677jLavIBDXqfPjt1u5/bbb8flcvHcc88Zbc45Ix0cH5CSkoLFYjkjWlNTU3PGaiGU+dGPfsT777/Phg0byMrKMtqcgGHHjh3U1NRQUFDgeczpdLJhwwaeffZZOjs7sVgsBlpoLBkZGYwfP77HY/n5+axcudIgiwKLf//3f+fnP/85t99+OwCTJk2iuLiYJ598Ujo43UhPTwfUSE5GRobncXmd7ondbmfx4sWcOHGCzz//PGijNyCrqHxCREQEBQUFrFmzpsfja9asYd68eQZZFTgoisKDDz7IO++8w+eff05eXp7RJgUUCxcuZM+ePRQVFXluM2bM4Fvf+hZFRUUh7dwAzJ8//4y2AocPHyY3N9cgiwKLtrY2zOael3KLxRKSZeL9kZeXR3p6eo/rdFdXF+vXr5fXaTeac3PkyBHWrl1LcnKy0SadFzKC4yMefvhhlixZwowZM5g7dy4vvPACJSUl3H///UabZjg//OEP+fvf/857771HfHy8J9JltVqJjo422DrjiY+PP0OPFBsbS3JystQpAT/5yU+YN28eTzzxBIsXL2br1q288MILvPDCC0abFhBcd911PP744+Tk5DBhwgQKCwt5+umn+e53v2u0aX6npaWFo0ePen4+ceIERUVFJCUlkZOTw9KlS3niiScYPXo0o0eP5oknniAmJoY77rjDQKv9R3/vT2ZmJrfccgs7d+7kww8/xOl0eq7VSUlJREREGGX2uWNsEZdY/N///Z+Sm5urREREKNOnT5dl0G6AXm9//etfjTYtYJFl4j354IMPlIkTJyqRkZHKuHHjlBdeeMFokwKGpqYm5aGHHlJycnKUqKgoZcSIEcovf/lLpbOz02jT/M4XX3zR67XmrrvuUhRFLRX/zW9+o6SnpyuRkZHKhRdeqOzZs8dYo/1If+/PiRMn+rxWf/HFF0abfk6YFEVR/OlQSSQSiUQikeiN1OBIJBKJRCIRDungSCQSiUQiEQ7p4EgkEolEIhEO6eBIJBKJRCIRDungSCQSiUQiEQ7p4EgkEolEIhEO6eBIJBKJRCIRDungSCQSiUQiEQ7p4EgkEolEIhEO6eBIJBKJRCIRDungSCQSiUQiEQ7p4EgkEolEIhGO/w9QOxDNUHercgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(0,4*np.pi)\n",
    "a=1\n",
    "plt.plot(x,np.sin(x+np.pi/2),x,np.cos(x+np.pi/2))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 程序设计语言：机器语言、汇编语言、高级语言\n",
    "## 编译和解释\n",
    "编译：fortran C C++ C#\n",
    "解释：basic JavaScript PHP \n",
    "Python？？？\n",
    "Python语言执行的几种方式：\n",
    "\n",
    "分析程序执行过程-IPO：  \n",
    "a. Input模块：  \n",
    "b. Process模块：  \n",
    "c. Output模块：  \n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section2> </a>\n",
    "## 2.2 程序实例\n",
    "\n",
    "<p><a href=\"https://yanghailin.blog.csdn.net/article/details/81126087?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link\">\n",
    "this is example of python</a></p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24\n",
      "['123', '124', '132', '134', '142', '143', '213', '214', '231', '234', '241', '243', '312', '314', '321', '324', '341', '342', '412', '413', '421', '423', '431', '432']\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "Created on Thu Jul 19 19:51:08 2018\n",
    "有四个数字：1、2、3、4，能组成多少个互不相同且无重复数字的三位数？各是多少？\n",
    "@author: yhl\n",
    "\"\"\"\n",
    " \n",
    "L=[]\n",
    "a=[1,2,3,4]\n",
    " \n",
    "#for i in range(len(a)):\n",
    " \n",
    "for val_1 in a:   #   for(i=1;i<n;I++)\n",
    "    for val_2 in a:\n",
    "        for val_3 in a:\n",
    "            if(val_1 == val_2 or val_1 == val_3 or val_2 == val_3):\n",
    "                continue;\n",
    "            else:\n",
    "                L.append(str(val_1)+str(val_2)+str(val_3))\n",
    " \n",
    " \n",
    "print(len(L)) \n",
    "print (L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 2 3 n= 1\n",
      "1 2 4 n= 2\n",
      "1 3 2 n= 3\n",
      "1 3 4 n= 4\n",
      "1 4 2 n= 5\n",
      "1 4 3 n= 6\n",
      "2 1 3 n= 7\n",
      "2 1 4 n= 8\n",
      "2 3 1 n= 9\n",
      "2 3 4 n= 10\n",
      "2 4 1 n= 11\n",
      "2 4 3 n= 12\n",
      "3 1 2 n= 13\n",
      "3 1 4 n= 14\n",
      "3 2 1 n= 15\n",
      "3 2 4 n= 16\n",
      "3 4 1 n= 17\n",
      "3 4 2 n= 18\n",
      "4 1 2 n= 19\n",
      "4 1 3 n= 20\n",
      "4 2 1 n= 21\n",
      "4 2 3 n= 22\n",
      "4 3 1 n= 23\n",
      "4 3 2 n= 24\n"
     ]
    }
   ],
   "source": [
    "n=0\n",
    "for i in range(1,5):\n",
    "    for j in range(1,5):\n",
    "        for k in range(1,5):\n",
    "            if( i != k ) and (i != j) and (j != k):\n",
    "                n=n+1\n",
    "                print (i,j,k,\"n=\",n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "'''\n",
    "企业发放的奖金根据利润提成。\n",
    "利润(I)低于或等于10万元时，奖金可提10%；\n",
    "利润高于10万元，低于20万元时，低于10万元的部分\n",
    "按10%提成，高于10万元的部分，可提成7.5%；\n",
    "20万到40万之间时，高于20万元的部分，可提成5%；\n",
    "40万到60万之间时高于40万元的部分，可提成3%；\n",
    "60万到100万之间时，高于60万元的部分，可提成1.5%;\n",
    "高于100万元时,超过100万元的部分按1%提成。\n",
    "从键盘输入当月利润I，求应发放奖金总数？\n",
    "'''\n",
    " \n",
    "profit = 0\n",
    "I = int(input(\"please input: \"))\n",
    "if(I<=10):\n",
    "    profit = 0.1 * I\n",
    "elif(I <= 20):\n",
    "    profit = 10 *0.1 + (I - 10)*0.075\n",
    "elif(I <=40):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (I - 20)*0.05\n",
    "elif(I <= 60):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (I - 40)*0.03\n",
    "elif(I <= 100):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (I - 60)*0.015\n",
    "else : \n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (100 - 60)*0.015 + (I -100)*0.01\n",
    "    \n",
    "print (\"profit=\",profit)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5000.0\n",
      "6000.0\n",
      "6000.0\n",
      "10000.0\n",
      "7500.0\n",
      "10000.0\n",
      "profit= 44500.0\n"
     ]
    }
   ],
   "source": [
    "i = int(input('净利润:'))\n",
    "arr = [1000000,600000,400000,200000,100000,0]\n",
    "rat = [0.01,0.015,0.03,0.05,0.075,0.1]\n",
    "r = 0\n",
    "for idx in range(0,6):\n",
    "    if i>arr[idx]:\n",
    "        r+=(i-arr[idx])*rat[idx]#r=r+nnn\n",
    "        print((i-arr[idx])*rat[idx])\n",
    "        i=arr[idx]\n",
    "print (\"profit=\",r)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 数字类型转换\n",
    "有时候，我们需要对数据内置的类型进行转换，数据类型的转换，你只需要将数据类型作为函数名即可。\n",
    "\n",
    "int(x) 将x转换为一个整数。\n",
    "\n",
    "float(x) 将x转换到一个浮点数。\n",
    "\n",
    "complex(x) 将x转换到一个复数，实数部分为 x，虚数部分为 0。\n",
    "\n",
    "complex(x, y) 将 x 和 y 转换到一个复数，实数部分为 x，虚数部分为 y。x 和 y 是数字表达式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section3></a>\n",
    "## 2.3程序的基本结构\n",
    "结构化程序的三大基本结构：\n",
    "\n",
    "a.顺序结构  \n",
    "b.分支结构  \n",
    "c.循环结构  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section4></a>\n",
    "## 2.4顺序结构\n",
    "\n",
    "### 数学函数\n",
    "<table><tr>\n",
    "<th>函数</th><th>返回值 ( 描述 )</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-abs.html\" rel=\"noopener noreferrer\">abs(x)</a></td><td>返回数字的绝对值，如abs(-10) 返回 10</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-ceil.html\" rel=\"noopener noreferrer\">ceil(x) </a></td><td>返回数字的上入整数，如math.ceil(4.1) 返回 5</td></tr>\n",
    "<tr><td><p>cmp(x, y)</p></td>\n",
    "<td>如果 x &lt; y 返回 -1, 如果 x == y 返回 0, 如果 x &gt; y 返回 1。 <strong style=\"color:red\">Python 3 已废弃，使用 (x&gt;y)-(x&lt;y) 替换</strong>。 </td>\n",
    "</tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-exp.html\" rel=\"noopener noreferrer\">exp(x) </a></td><td>返回e的x次幂(e<sup>x</sup>),如math.exp(1) 返回2.718281828459045</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-fabs.html\" rel=\"noopener noreferrer\">fabs(x)</a></td><td>返回数字的绝对值，如math.fabs(-10) 返回10.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-floor.html\" rel=\"noopener noreferrer\">floor(x) </a></td><td>返回数字的下舍整数，如math.floor(4.9)返回 4</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log.html\" rel=\"noopener noreferrer\">log(x) </a></td><td>如math.log(math.e)返回1.0,math.log(100,10)返回2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log10.html\" rel=\"noopener noreferrer\">log10(x) </a></td><td>返回以10为基数的x的对数，如math.log10(100)返回 2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-max.html\" rel=\"noopener noreferrer\">max(x1, x2,...) </a></td><td>返回给定参数的最大值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-min.html\" rel=\"noopener noreferrer\">min(x1, x2,...) </a></td><td>返回给定参数的最小值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-modf.html\" rel=\"noopener noreferrer\">modf(x) </a></td><td>返回x的整数部分与小数部分，两部分的数值符号与x相同，整数部分以浮点型表示。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-pow.html\" rel=\"noopener noreferrer\">pow(x, y)</a></td><td> x**y 运算后的值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-round.html\" rel=\"noopener noreferrer\">round(x [,n])</a></td><td><p>返回浮点数 x 的四舍五入值，如给出 n 值，则代表舍入到小数点后的位数。</p>\n",
    "<p><strong>其实准确的说是保留值将保留到离上一位更近的一端。</strong></p>\n",
    "</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sqrt.html\" rel=\"noopener noreferrer\">sqrt(x) </a></td><td>返回数字x的平方根。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 随机数函数\n",
    "随机数可以用于数学，游戏，安全等领域中，还经常被嵌入到算法中，用以提高算法效率，并提高程序的安全性。\n",
    "\n",
    "Python包含以下常用随机数函数：\n",
    "\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-choice.html\" rel=\"noopener noreferrer\">choice(seq)</a></td><td>从序列的元素中随机挑选一个元素，比如random.choice(range(10))，从0到9中随机挑选一个整数。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-randrange.html\" rel=\"noopener noreferrer\">randrange ([start,] stop [,step]) </a></td><td>从指定范围内，按指定基数递增的集合中获取一个随机数，基数默认值为 1</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-random.html\" rel=\"noopener noreferrer\">random() </a></td><td> 随机生成下一个实数，它在[0,1)范围内。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-seed.html\" rel=\"noopener noreferrer\">seed([x]) </a></td><td>改变随机数生成器的种子seed。如果你不了解其原理，你不必特别去设定seed，Python会帮你选择seed。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-shuffle.html\" rel=\"noopener noreferrer\">shuffle(lst) </a></td><td>将序列的所有元素随机排序</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-uniform.html\" rel=\"noopener noreferrer\">uniform(x, y)</a></td><td>随机生成下一个实数，它在[x,y]范围内。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 三角函数\n",
    "Python包括以下三角函数：\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-acos.html\" rel=\"noopener noreferrer\">acos(x)</a></td><td>返回x的反余弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-asin.html\" rel=\"noopener noreferrer\">asin(x)</a></td><td>返回x的反正弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan.html\" rel=\"noopener noreferrer\">atan(x)</a></td><td>返回x的反正切弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan2.html\" rel=\"noopener noreferrer\">atan2(y, x)</a></td><td>返回给定的 X 及 Y 坐标值的反正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-cos.html\" rel=\"noopener noreferrer\">cos(x)</a></td><td>返回x的弧度的余弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-hypot.html\" rel=\"noopener noreferrer\">hypot(x, y)</a></td><td>返回欧几里德范数 sqrt(x*x + y*y)。 </td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sin.html\" rel=\"noopener noreferrer\">sin(x)</a></td><td>返回的x弧度的正弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-tan.html\" rel=\"noopener noreferrer\">tan(x)</a></td><td>返回x弧度的正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-degrees.html\" rel=\"noopener noreferrer\">degrees(x)</a></td><td>将弧度转换为角度,如degrees(math.pi/2) ，  返回90.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-radians.html\" rel=\"noopener noreferrer\">radians(x)</a></td><td>将角度转换为弧度</td></tr>\n",
    "</table>\n",
    "\n",
    "### 数学常量\n",
    "\n",
    "<table><tr>\n",
    "<th>常量</th><th>描述</th></tr>\n",
    "<tr><td>pi</td><td>数学常量 pi（圆周率，一般以π来表示）</td></tr>\n",
    "<tr><td>e</td><td>数学常量 e，e即自然常数（自然常数）。</td></tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 7.0.1 (20221109.1506)\n",
       " -->\n",
       "<!-- Title: 顺序结构 Pages: 1 -->\n",
       "<svg width=\"208pt\" height=\"476pt\"\n",
       " viewBox=\"0.00 0.00 208.12 476.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 472)\">\n",
       "<title>顺序结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-472 204.12,-472 204.12,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"127.06,-468 73.06,-468 73.06,-432 127.06,-432 127.06,-468\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-446.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Start</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"200.18,-396 40.91,-396 -0.06,-360 159.21,-360 200.18,-396\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-374.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">input Radius =?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-431.7C100.06,-424.41 100.06,-415.73 100.06,-407.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-407.62 100.06,-397.62 96.56,-407.62 103.56,-407.62\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"143.06,-324 57.06,-324 57.06,-288 143.06,-288 143.06,-324\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-302.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print Radius</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-359.7C100.06,-352.41 100.06,-343.73 100.06,-335.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-335.62 100.06,-325.62 96.56,-335.62 103.56,-335.62\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"152.56,-252 47.56,-252 47.56,-216 152.56,-216 152.56,-252\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-230.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating Area</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-287.7C100.06,-280.41 100.06,-271.73 100.06,-263.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-263.62 100.06,-253.62 96.56,-263.62 103.56,-263.62\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"165.56,-180 34.56,-180 34.56,-144 165.56,-144 165.56,-180\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-158.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Caculating perimeter</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;5 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>4&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-215.7C100.06,-208.41 100.06,-199.73 100.06,-191.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-191.62 100.06,-181.62 96.56,-191.62 103.56,-191.62\"/>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"127.06,-108 73.06,-108 73.06,-72 127.06,-72 127.06,-108\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-86.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">print</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-143.7C100.06,-136.41 100.06,-127.73 100.06,-119.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-119.62 100.06,-109.62 96.56,-119.62 103.56,-119.62\"/>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"127.06,-36 73.06,-36 73.06,0 127.06,0 127.06,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"100.06\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">end</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;7 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>6&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M100.06,-71.7C100.06,-64.41 100.06,-55.73 100.06,-47.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"103.56,-47.62 100.06,-37.62 96.56,-47.62 103.56,-47.62\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x20baea4e410>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"顺序结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','Start')\n",
    "dot.node('2','input Radius =?',shape='parallelogram')\n",
    "dot.node('3','Print Radius')\n",
    "dot.node('4','Caculating Area')\n",
    "dot.node('5','Caculating perimeter')\n",
    "dot.node('6','print')\n",
    "dot.node('7','end')\n",
    "dot.edges(['12','23','34','45','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ridus= 15\n",
      "面积和周长: 706.8375000000001 94.245\n"
     ]
    }
   ],
   "source": [
    "''' \n",
    "计算圆周长\n",
    "'''\n",
    "Radius = eval(input(\"请输入圆半径:\"))\n",
    "print(\"Ridus=\",Radius)\n",
    "Area = 3.1415*Radius*Radius\n",
    "perimeter  = 2*3.1415*Radius \n",
    "print(\"面积和周长:\",Area,perimeter)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section4></a>\n",
    "## 2.5分支结构\n",
    "### 2.5.1 Python比较运算符\n",
    "\n",
    "以下假设变量a为10，变量b为20：\n",
    "<table><tr>\n",
    "<th width=\"10%\">运算符</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>==</td><td> 等于 - 比较对象是否相等</td><td> (a == b) 返回 False。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>!=</td><td> 不等于 - 比较两个对象是否不相等</td><td> (a != b) 返回 True。 </td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>&gt;</td><td> 大于 - 返回x是否大于y</td><td> (a &gt; b) 返回 False。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;</td><td> 小于 - 返回x是否小于y。所有比较运算符返回1表示真，返回0表示假。这分别与特殊的变量True和False等价。注意，这些变量名的大写。</td><td> (a &lt; b) 返回 True。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&gt;=</td><td> 大于等于 - 返回x是否大于等于y。</td><td> (a &gt;= b) 返回 False。</td>\n",
    "\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;=</td><td> 小于等于 - 返回x是否小于等于y。</td><td> (a &lt;= b) 返回 True。 </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "### 2.5.2 Python逻辑运算符        \n",
    "Python语言支持逻辑运算符，以下假设变量 a 为 10, b为 20:\n",
    "<table><tr>\n",
    "<th>运算符</th><th>逻辑表达式</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>and</td><td>x and y</td><td> 布尔\"与\" - 如果 x 为 False，x and y 返回 x 的值，否则返回 y 的计算值。  </td><td> (a and b) 返回 20。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>or</td><td>x or y</td><td>布尔\"或\" - 如果 x 是 True，它返回 x 的值，否则它返回 y 的计算值。</td><td> (a or b) 返回 10。</td>\n",
    "</tr>\n",
    "<tr><td>not</td><td>not x</td><td>布尔\"非\" - 如果 x 为 True，返回 False 。如果 x 为 False，它返回 True。</td><td> not(a and b) 返回 False </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.5.3 条件控制语句\n",
    "Python 条件语句是通过一条或多条语句的执行结果（True 或者 False）来决定执行的代码块。\n",
    "\n",
    "可以通过下图来简单了解条件语句的执行过程:\n",
    "\n",
    "<img src=\".//img//if-condition.jpg\" width=\"250\"></img>\n",
    "\n",
    "<img src=\".//img//python-if.webp\" width=\"150\"></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 求绝对值。\n",
    "\n",
    "输入：x\n",
    "$$\n",
    "\\begin{align}\n",
    "&&\\left|y\\right |= \\left\\{\\begin{matrix}\n",
    "x & if \\: x\\geq 0\\\\-x& if \\:x< 0\n",
    "\\end{matrix}\\right.{\\color{Red} }\n",
    "\\end{align}\n",
    "$$\n",
    "输出：y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'graphviz' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32mc:\\VSWork\\Pythonwork\\0001\\第二_课程序设计基础.ipynb Cell 19\u001b[0m in \u001b[0;36m<cell line: 1>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=0'>1</a>\u001b[0m dot\u001b[39m=\u001b[39mgraphviz\u001b[39m.\u001b[39mDigraph(comment\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mthe round table\u001b[39m\u001b[39m'\u001b[39m,name\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m分支结构\u001b[39m\u001b[39m\"\u001b[39m,node_attr\u001b[39m=\u001b[39m{\u001b[39m'\u001b[39m\u001b[39mshape\u001b[39m\u001b[39m'\u001b[39m: \u001b[39m'\u001b[39m\u001b[39mbox\u001b[39m\u001b[39m'\u001b[39m})\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=1'>2</a>\u001b[0m dot\u001b[39m.\u001b[39mnode(\u001b[39m'\u001b[39m\u001b[39m1\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39m开始\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=2'>3</a>\u001b[0m dot\u001b[39m.\u001b[39mnode(\u001b[39m'\u001b[39m\u001b[39m2\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39m输入Real Number =?\u001b[39m\u001b[39m'\u001b[39m,shape\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mparallelogram\u001b[39m\u001b[39m'\u001b[39m)\n",
      "\u001b[1;31mNameError\u001b[0m: name 'graphviz' is not defined"
     ]
    }
   ],
   "source": [
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','输入Real Number =?',shape='parallelogram')\n",
    "dot.node('3','判断RealNumber是否大于0？',shape='diamond')\n",
    "dot.node('4','RealNumber=RealNumber')\n",
    "dot.node('5','RealNumber=-RealNumber')\n",
    "dot.node('6','输出绝对值',shape='parallelogram')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','34','35','46','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Real Number 3\n",
      "绝对值: 3\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "求绝对值。\n",
    "'''\n",
    "RealNumber = eval(input(\"输入实数:\"))\n",
    "\n",
    "if (RealNumber < 0):\n",
    "    RealNumber = -RealNumber\n",
    "print(\"绝对值:\",RealNumber)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section6></a>\n",
    "## 2.6循环结构\n",
    "\n",
    "循环结构：\n",
    "\n",
    "while语句\n",
    "\n",
    "for语句\n",
    "\n",
    "循环分类：  \n",
    "当型循环  \n",
    "直到型循环  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "char1 =\"a\"\n",
    "char2=\"b\"\n",
    "char3=\"c\"\n",
    "char=char1+char2+char3\n",
    "boor1=(char[2]==char3)\n",
    "print(boor1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 整数累加：  \n",
    "输入：正整数R    \n",
    "处理：  \n",
    "S=1+2+3+…+R  \n",
    "<img src=\"./img/int_add.png\" width=\"150\">  \n",
    "输出：输出S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "累加求和 55\n"
     ]
    }
   ],
   "source": [
    "R = eval(input(\"请输入正整数:\"))\n",
    "i, S = 0, 0\n",
    "while (i<=R):\n",
    "    S = S + i\n",
    "    i = i + 1\n",
    "print(\"累加求和\",S)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 提供了 for 循环和 while 循环（在 Python 中没有 do..while 循环）:\n",
    "\n",
    "<table><tr><th style=\"width:30%\">循环类型</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-while-loop.html\" title=\"Python WHILE 循环\">while 循环</a></td><td>在给定的判断条件为 true 时执行循环体，否则退出循环体。</td></tr>\n",
    "<tr><td><a href=\"/python/python-for-loop.html\" title=\" Python FOR 循环\">for 循环</a></td><td>重复执行语句</td></tr>\n",
    "<tr><td><a href=\"/python/python-nested-loops.html\" title=\"Python 循环全套\">嵌套循环</a></td><td>你可以在while循环体中嵌套for循环</td></tr>\n",
    "</table>\n",
    "\n",
    "### 循环控制语句\n",
    "循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句：\n",
    "<table><tr><th style=\"width:30%\">控制语句</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-break-statement.html\" title=\"Python break 语句\">break 语句</a></td><td>在语句块执行过程中终止循环，并且跳出整个循环</td></tr>\n",
    "<tr><td><a href=\"/python/python-continue-statement.html\" title=\"Python  语句\">continue 语句</a></td><td>在语句块执行过程中终止当前循环，跳出该次循环，执行下一次循环。</td></tr>\n",
    "<tr><td><a href=\"/python/python-pass-statement.html\" title=\"Python pass 语句\">pass 语句</a></td><td>pass是空语句，是为了保持程序结构的完整性。</td></tr>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 绘制数字图画\n",
    "   <img src=\".//xiaoxin.jpg\" width=\"150 \" alt=\"机器猫\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "C:\\Users\\WYC18\\AppData\\Local\\Temp\\ipykernel_2996\\3984012943.py:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "  \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "llIlllllllllllllllllllllllllllllllllIlp+``````````````````````````````````````````````````````````````````````\n",
      "IlllllllllllllllllllllllllllllllllllIIp]``````````````````````````````````````````````````````````````````````\n",
      "llllllllllllllllllllllllllllllllllllIlq{``````````````````````````````````````````````````````````````````````\n",
      "lllIIlllllllllllllllllllllllllllllllIlpt``````````````````````````````````````````````````````````````````````\n",
      "llllllllllllllllllllllllllllllllllllIldx``````````````````````````````````````````````````````````````````````\n",
      "llllllllllllllllllllllllllllllllllllllpz``````````````````````````````````````````````````````````````````````\n",
      "llllllllllllllllllllllllllllllllllllIlpJ``````````````````````````````````````````````````````````````````````\n",
      "llllllllllllllllllllllllllllllllllllIldC``````````````````````````````````````````````````````````````````````\n",
      "llllllllllllllllllllllllllllllllllllIlb0``````````````````````````````````````````````````````````````````````\n",
      "llllllllllllllllllllllllllllllllllllIlbm'`````````````````````````````````````````````````````````````````````\n",
      "llllllllllllllllllllllllllllllllllllIlkq``````````````````````````````````````````````````````````````````````\n",
      "llllllllllllllllllllllllllllllllllllIlddpdppppdppppppqqdppqpppdppppqdppppppppdppddpppppppppdpppppppppdddppqqpd\n",
      "llllllllllllllllllllllllllllllllllllIlwp::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n",
      "llllllllllllllllllllllllllllllllllllIl0d::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n",
      "llllllllllllllllllllllllllllllllllllIlLd::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n",
      "llllllllllllllllllllllllllllllllllllIlXd::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n",
      "llllllllllllllllllllllllllllllllllllIlnb::::::::::::::::::::::::,lppdpp<::::::::::::::::::::::::::::::::::::::\n",
      "llllllllllllllllllllllllllllllllllllIltd::::::::::::::::::,>}jncQpppppppdX;:::::::::::::::::::::::::::::::::::\n",
      "llllllllllllllllllllllllllllllllllllIl(p;::::::;I::,Lpppppppppppppppppppppp,::::::::::::::::::::::::::::::::::\n",
      "llllllllllllllllllllllllllllllllllllll[p:::dpppppppppppppppqQutppppppppppppp,:::::::::::::::::::::::::::::::::\n",
      "llllllllllllllllllllllllllllllllllllll_puppppppppppppp?;;;;;;;pppppppZppppppd:::::::::::::::::::::::::::::::::\n",
      "llllllllllllllllllllllllllllllllllllII+pppppppppppppppp:;;;;;IpppppO;;;pppppq:::::::::::::::::::::::::::::::::\n",
      "lllllllllllllllllllll!wtlllllllllllll0ppppppppL;;ppppppr;;;;;;Idb1I;;;;;;;I;;bpppqLt<:;:::::::::::::::::::::::\n",
      "llllllllllllllI!llll?dipplllllllllll}pppppppX;;;;;qpppq;;;;;;;;;;;;;;;;;;;;;;;;;;I;;I:1wppdOl:::::::::::::::::\n",
      "llllllllllllI?d:Jpw}ppI\\p;llllllllIldpppppp;;;;;;;;:;;;;;;;;;;;;;;;;;:l)ddpppq+;;;;;;;;;I;;;Iqdq~:,:::::::::::\n",
      "lllllllllllllIrq+I;}pd;:p+llllllllIIJppppl;;;;;;;;;;;;;;;;;;;;;;;;::!:;;;;;;;;;;;;;;;;;;;;;;:;;;[dp:::::::::::\n",
      "llllllllllllllIIdpt:;;;:d|llllllll:dppp:;;;;;;;;;;;;;;;;:{pQ;;;;;;;;;;;;;;;;;;;;;I;;;->;;;;;;;;;;;;pm:::::::::\n",
      "llllllllllllllIIIppm;;;;IdpIlllllIppppqI;;;;;;;;;;;Icdddr;:;;;;;;;;;;;;;;;;;;;?~I?>;;!>;;;;;;;;;;;;;qq::::::::\n",
      "lllllllllllllllljqd;;qqzOIp)IllllUppppq;;;;;;;>ppppp1;;;;;;;;;;;;;;;;;;;;;;;;;II;;;;;;;;;;;;;;;;;;;;<dl:::::::\n",
      "lllllllllllllIlpZ;;;pO,;;;YqIYpd\\dppppz;)pzpdb}I;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;dQ:::::::\n",
      "lllllllllllllllIqq;;;w};;;;?dp:;Uppppp];;;;;;;;;;;;IlI:~l;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Ipv:::::::\n",
      "llllllllllllllllILpu;;;>pI;;Ipp);qpppp<;;;;;;;;?-;;l?l;~<;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;fp::::::::\n",
      "lllllllllllllllllIlikpb</p];;;;)pddpppi;;;;;;;;;I;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;vpl::::::::\n",
      "lllllllllllllllllllllllIlQpZ;;;;;cpcdp:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;I+1;;;;;;;;;;;;;;;;pd:,::::::::\n",
      "llllllllllllllllllllllllIdJpq:;:qqvvvvpp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:;;;;;;;;;;+bpI:::::::::::\n",
      "lllllllllllllllllllllllllqvInp+bqvvvvvvvddI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!qpp<;:::::::::::::\n",
      "lllllllllllllllllllllllllbb;;IppvvvvvvvvvvdpI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::;![zmppppppvvvdq,:::::::::::::\n",
      "llllllllllllllllllllllllIlpp/pdvvvvvvvvvvvvcqq<I;;;;;;;;:>vmdppppqpppdbbwZJYzcvuuuvvvvvvvcvvvvvpp:::::::::::::\n",
      "lllllllllllllllllllllllllIIlpquvvvvvvvvvvvvvvvpppdppddpLvnvvvuvvvvvvvvvuvvvvvvvvvvuuvvvvvvvvvvvvdw::::::::::::\n",
      "lllllllllllllllllllllllllI!dOvvvvvvvvvvvvvvvvvvv0cvppf[ppcvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvdv:,:::::::::\n",
      "lllllllllllllllllllllllllIlppuvvvvvvvvvvvvvvvvvvvvvvvJdd]LppvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXp;::::::::::\n",
      "llllllllllllllllllllllllllIlipdvvvvvvvvvvvvvvvvvvvvvvvvcppU?ppUvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvpp;:::::::::\n",
      "lllllllllllllllllllllllllllllIlppJvvvvvvvvvvvvvvvvvvvvvvvczdp]xpbvvvvvvvvvvvvvvvvvvvvvvvvqdvvvvvvvudq,::::::::\n",
      "lllllllllllllllllllllllllllllllIIJqbvvvvvvvvvvvvvvvvvvvvvvuvcpdm?qpCYvvvvvvvvvvvvvvvvvvvvUpuvvvvUppp,:::::::::\n",
      "llllllllllllllllllllllllllllllllllI!dpYvvvvvvvvvvvvvvvvvvvvvvvvvdq1)pdYvvvvvvvvvvvvvvvvvvcpnOdpw{qU::;::::::::\n",
      "lllllllllllllllllllllllllllllllllllIlldwvvvvvvvvvvvvvvvvvvvvvvvvvuOpp-OpwCvvvvvvvvvvvvvvvvdX;,dd:;dq,:::::::::\n",
      "llllllllllllllllllllllllllllllllllllI[pcvvvvvvvvvvvvvvvvvvvvvvvvvvvvvppx?ppzvvvvvvvvvvvvvvpw:::qp;I0pv;:::::::\n",
      "lllllllllllllllllllllllllllllllllllllppvvuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvYqp?Udduvvvvvvvvvvvdq:::wp:;fUdd:::::::\n",
      "llllllllllllllllllllllllllllllllllIlpdvcvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvbqY]pdUvvvvvuzpdpppdpppppq,,::::::::\n",
      "lllllllllllllllllllllllllllllllllll/quvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvcdq]jddpppu-?--------|p/;:::::::::\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "show_heigth = 50\n",
    "show_width = 110\n",
    "#这两个数字是调出来的\n",
    "\n",
    "ascii_char = list(\n",
    "    \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n",
    "#生成一个ascii字符列表\n",
    "char_len = len(ascii_char)\n",
    "pic=plt.imread('xiaoxin.jpg')\n",
    "pic = plt.imread(\".\\\\xiaoxin.jpg\")\n",
    "#使用plt.imread方法来读取图像，对于彩图，返回size = heigth*width*3的图像\n",
    "#matplotlib 中色彩排列是R G B\n",
    "#opencv的cv2中色彩排列是B G R\n",
    "\n",
    "pic_heigth, pic_width, _ = pic.shape\n",
    "#获取图像的高、宽\n",
    "\n",
    "gray = 0.2126 * pic[:, :, 0] + 0.7152 * pic[:, :, 1] + 0.0722 * pic[:, :, 2]\n",
    "#RGB转灰度图的公式 gray = 0.2126 * r + 0.7152 * g + 0.0722 * b\n",
    "\n",
    "#思路就是根据灰度值，映射到相应的ascii_char\n",
    "for i in range(show_heigth):\n",
    "    #根据比例映射到对应的像素\n",
    "    y = int(i * pic_heigth / show_heigth)\n",
    "    text = \"\"\n",
    "    for j in range(show_width):\n",
    "        x = int(j * pic_width / show_width)\n",
    "        text += ascii_char[int(gray[y][x] / 256 * char_len)]\n",
    "    print(text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ! pip install -i http源\n",
    "新版ubuntu要求使用https源，要注意。\n",
    "\n",
    "清华：https://pypi.tuna.tsinghua.edu.cn/simple\n",
    "\n",
    "阿里云：https://mirrors.aliyun.com/pypi/simple/\n",
    "\n",
    "中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/\n",
    "\n",
    "华中理工大学：https://pypi.hustunique.com/\n",
    "\n",
    "山东理工大学：https://pypi.sdutlinux.org/ \n",
    "\n",
    "豆瓣：https://pypi.douban.com/simple/\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
